package org.groupg.practice.math3;

import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.math3.linear.Array2DRowRealMatrix;
import org.apache.commons.math3.linear.LUDecomposition;
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
import org.apache.commons.math3.stat.inference.TTest;
import org.apache.commons.math3.util.MathUtils;
import org.apache.commons.math3.util.Precision;

public class MathExample {

    /**
     * 3.2 实矩阵
     *
     * 这 RealMatrix 接口将实数矩阵表示为 条目。 支持以下基本矩阵运算：
     *
     *     矩阵加法、减法、乘法
     *     标量加法和乘法
     *     转置
     *     规范与追踪
     *     向量上的操作
     */
    static void test1(){

        // 使用工厂创建一个两行三列的实矩阵
        // 为我们选择实现类的方法。
        double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
        RealMatrix m = MatrixUtils.createRealMatrix(matrixData);

        // 多了一个三行两列，这次实例化
        // RealMatrix 直接实现类。
        double[][] matrixData2 = { {1d,2d}, {2d,5d}, {1d, 7d}};
        RealMatrix n = new Array2DRowRealMatrix(matrixData2);

        // 注意：构造函数在两种情况下都会复制输入的 double[][] 数组。

        // 现在将 m 乘以 n
        RealMatrix p = m.multiply(n);
        System.out.println(p.getRowDimension());  // 2
        System.out.println(p.getColumnDimension());  // 2

        // 反转 p，使用 LU 分解
        RealMatrix pInverse = new LUDecomposition(p).getSolver().getInverse();


    }

    static void test2(){
        TTest tTest = new TTest();
        System.out.println(tTest.homoscedasticTTest(new double[]{1.0, 0.8, 1.2}, new double[]{0.5, 0.5, 1.25}));
        System.out.println(tTest.tTest(new double[]{1.0, 0.8, 1.2}, new double[]{0.5, 0.5, 1.25}));

    }
    static void test3(){

        // 在误差范围内对比两个数字
        System.out.println(Precision.compareTo(1.5,1.500000000001,0.1));
    }

    public static void main(String[] args) {
        test3();
    }
}
